#include "Modele.h"

using namespace std;

Modele::Modele() 
{
	m_map = new Map("modele/xml/mapTest.xml");
	m_joueur = new Personnage();
	m_menu = new Menu();
	
	putPersonnageOnMap();
}
//Methode pour la map
	std::vector<std::vector<Case* > > Modele::getMap()
	{
		return m_map->getMap();
	}
	
	void Modele::changementMap(bool monter)
	{
		if(monter)//on retourne sur la carte precedente
		{
			//todo
		}
		else//carte suivante
		{
			//ameliorer en fonction du niveau.
			m_map = new Map("modele/xml/mapTest2.xml");
		}
	}

	int Modele::getMapDimension(bool x)
	{
		if(x)
			return m_map->getX();
		else
			return m_map->getY();
	}

//Methode pour le personnage
	Personnage* Modele::getPersonnage()
	{
		return m_joueur;
	}

	int Modele::getPersonnageX()
	{
		return m_joueur->getPosition().first;
	}
	int Modele::getPersonnageY()
	{
		return m_joueur->getPosition().second;
	}

	void Modele::setPersonnageX(int x)
	{
		//permet d'effacer la presence du personnage en memoire pour ensuite le deplacer
		this->getMap()[m_joueur->getPosition().second][m_joueur->getPosition().first]->setHasPersonnage(false);
		if(x>=-1 && x<=1)
			m_joueur->setX(this->getPersonnageX()+x);
		else
			cout<<"Fail move X"<<endl;
	}
	void Modele::setPersonnageY(int y)
	{
		//permet d'effacer la presence du personnage en memoire pour ensuite le deplacer
		this->getMap()[m_joueur->getPosition().second][m_joueur->getPosition().first]->setHasPersonnage(false);
		if(y<=1 && y>=-1)
			m_joueur->setY(this->getPersonnageY()+y);
		else
			cout<<"Fail move Y"<<endl;
	}

	void Modele::setPersonnagePosition(int x, int y)
	{
		setPersonnageX(x);
		setPersonnageY(y);
	}

void Modele::putPersonnageOnMap()
{
	this->getMap()[m_joueur->getPosition().second][m_joueur->getPosition().first]->setHasPersonnage(true);
}

// Methode pour le menu
	int Modele::getSizeMenu()
	{
		m_menu->getSize();
	}

	string Modele::getElemMenu(int i)
	{
		return m_menu->getElem(i);
	}

	void Modele::supprLastElemMenu()
	{
		//~ return m_menu->supprElem();
	}
	
	void Modele::addElemMenu(std::string action)
	{
		m_menu->addElem(action);
	}
	void Modele::setMenu(Menu* menu)
	{
		m_menu = menu;
	}
